home *** CD-ROM | disk | FTP | other *** search
/ Day Cry / Day Cry CD.bin / oh_towns / taropyon / silib / silib.lzh / PRG / SDKMENU / SDKMENU.C < prev    next >
C/C++ Source or Header  |  1994-01-09  |  13KB  |  528 lines

  1. /*************************************************************************
  2. *    SIDEWORK MENU
  3. *************************************************************************/
  4.  
  5. #include    <stdio.h>
  6. #include    <stdlib.h>
  7. #include    <string.h>
  8. #include    <ctype.h>
  9. #include    <msdos.cf>
  10.  
  11. #include    <egb.h>
  12. #include    <mos.h>
  13. #include    <kkstr2.h>
  14. #include    <sidework.h>
  15.  
  16. #include    <siapl.h>
  17. #include    <silib.h>
  18. #include    <sisdk.h>
  19. #include    <SDK/blkdlg.h>
  20. #include    <sifs.h>
  21. #include    <kbcode.h>
  22. #include    "sdkmenu.h"
  23.  
  24. #define    TITLE_DLG    "SIDEWORK MENU"
  25.  
  26. #define    SBATT    (SB_ATT_VERTICAL | SB_ATT_MAXADJUST | SB_ATT_DRAGSLD | SB_ATT_BTNREP)
  27.  
  28. #define    NUMDSPMAX    (14)    /* ò\ĪÉö                        */
  29. #define    YSMENU        (14)    /* ìÇû┌é╠ÅcâhâbâgÉö(14 or 16)    */
  30.  
  31. #if    YSMENU == 16
  32. #    define    _KEY_FTS    (SiFts->ftsSt1)
  33. #    define    _MSG_FTS    (SiFts->ftsSs1)
  34. #endif
  35. #if    YSMENU == 14
  36. #    define    _KEY_FTS    (SiFts->ftsSh1)
  37. #    define    _MSG_FTS    (SiFts->ftsSs1)
  38. #endif
  39.  
  40. int        evNoCancel;
  41. int        evNoCurup;
  42. int        evNoCurdown;
  43. int        evNoExec;
  44. #define    SDKEV_CANCEL    (evNoCancel)
  45. #define    SDKEV_EXIT        SDKEV_CANCEL
  46. #define    SDKEV_CURUP        (evNoCurup)
  47. #define    SDKEV_CURDOWN    (evNoCurdown)
  48. #define    SDKEV_EXEC        (evNoExec)
  49.  
  50. extern int        sdk_exec(int);
  51. extern int        sdk_getNumProg(void);
  52. extern int        sdk_getProgNameLen(int);
  53. extern int        sdk_getProgName(int,char *,char *);
  54. extern int        sdk_isExist(void);
  55.  
  56. char            *SkeyTbl;
  57.  
  58. int        SdkExec( int no )
  59. {
  60.     int        ret;
  61.  
  62.     if ( sdk_isAtWork() )
  63.     {    /* âTâCâhâÅü[âNïNô«Æå    */
  64.         sdk_chain( no + 1);
  65.     } else
  66.     {    /* Æ╩ÅφâAâvâèâPü[âVâçâô    */
  67.         ret = sdk_exec( no + 1);
  68.         sdk_control(0);
  69.     }
  70.     return (ret);
  71. }
  72.  
  73. /*************************************************************************
  74. *    âvâìâOâëâÇû╝é╠ò\Ī
  75. *************************************************************************/
  76.  
  77. void    sdkdsp_prog( SDKDLG_T *sdkDlg, int pos )
  78. {
  79.     int            i;
  80.     int            x1 = sdkDlg->frScn.x1;
  81.     int            x2 = sdkDlg->frScn.x2;
  82.     LAYER_T        *ly = SiScn->layerCrt;
  83.  
  84.     if ( sdkDlg->sb )
  85.     {    /* âXâNâìü[âïâoü[É▌ÆΦ    ----------------------------------------*/
  86.         SB_T    *sb = sdkDlg->sb;
  87.  
  88.         sb->top   = sdkDlg->posDspTop;
  89.     }
  90.  
  91.     MOS_DEC();
  92.     for ( i = 0; i < sdkDlg->numDsp; ++i )
  93.     {
  94.         int        p;
  95.  
  96.         p = sdkDlg->posDspTop + i;
  97.         if ( pos < 0 || pos == p )
  98.         {
  99.             int        y;
  100.  
  101.             y = sdkDlg->frScn.y1 + 2 + i*YSMENU;
  102.             if ( sdkDlg->posDspTop + i < sdkDlg->numProg )
  103.             {
  104.                 COLOR_T        col, bac, c1, c2, strcol;
  105.                 int            xx1, yy1, xx2, yy2;
  106.  
  107.                 if ( sdkDlg->posSel != i )
  108.                 {
  109.                     col = ly->col.black;
  110.                     bac = ly->col.gray;
  111.                     c1  = ly->col.lgray;
  112.                     c2  = ly->col.dark;
  113.                     strcol = ly->col.black;
  114.                 } else
  115.                 {
  116.                     col = ly->col.gray;
  117.                     bac = ly->col.black;
  118.                     c1  = ly->col.dark;
  119.                     c2  = ly->col.lgray;
  120.                     strcol = ly->colTbl[8+2];
  121.                 }
  122.  
  123.                 xx1 = x1 + 2 + 8 + 2;
  124.                 yy1 = y;
  125.                 xx2 = x2 - 2;
  126.                 yy2 = y + YSMENU - 1;
  127.  
  128.                 {
  129.                     char    tmp[128], key[2];
  130.  
  131.                     sdk_getProgName( p+1, tmp, key );
  132.                     key[1] = '\0';
  133.                     if ( !SkeyTbl[p] )
  134.                         strcol = ly->col.gray;
  135.                     SCN_BOXF(x1+2,yy1,xx1-1,yy2,PSET,ly->col.white);
  136. #if    YSMENU == 14
  137.                     SCN_PUTS(_KEY_FTS,key,x1+2+1,y+(YSMENU-_KEY_FTS->fntYs+2)/2+1,OPAQUE,ly->col.lgray,ly->col.white);
  138.                     SCN_PUTS(_KEY_FTS,key,x1+2  ,y+(YSMENU-_KEY_FTS->fntYs+2)/2  ,PSET  ,strcol       ,ly->col.white);
  139. #else
  140.                     SCN_PUTS(_KEY_FTS,key,x1+2+1,y+(YSMENU-_KEY_FTS->fntYs+1)/2+1,OPAQUE,ly->col.lgay ,ly->col.white);
  141.                     SCN_PUTS(_KEY_FTS,key,x1+2  ,y+(YSMENU-_KEY_FTS->fntYs+1)/2  ,PSET  ,strcol       ,ly->col.white);
  142. #endif
  143.                     SCN_BOXFCON(xx1,yy1,xx2,yy2,1,PSET,bac,c1,c2);
  144.                     {
  145.                         int        xs, ys;
  146.  
  147.                         FTS_chkPutSize( _MSG_FTS, &xs, &ys, tmp );
  148.                         SCN_PUTS(_MSG_FTS,tmp,(xx1+2+xx2-2-xs+1)/2,(yy1+yy2+1-ys)/2,OPAQUE,col,bac);
  149.                     }
  150.                 }
  151.  
  152.                 if ( pos < 0 )
  153.                 {
  154.                     EV_SETBTN1(sdkDlg->evDsp, i, p, sdkDlg, 0,
  155.                         NULL, EVSW_LEFT,xx1,yy1,xx2,yy2,1,c1,c2);
  156.                 }
  157.             } else
  158.             {
  159.                 SCN_BOXF(x1+1,y,x2-1,y+15,PSET,ly->col.white);
  160.                 if ( pos < 0 )
  161.                     EV_datUnset( sdkDlg->evDsp, i);
  162.             }
  163.  
  164.             if ( pos == p )
  165.                 break;
  166.         }
  167.     }
  168.     MOS_INC();
  169. }
  170.  
  171. static int        sdkEvFunc_cursor( int evNo, EVDAT_T *evdat )
  172. {
  173.     SDKDLG_T    *sdkDlg = evdat->ptr;
  174.  
  175.     if ( evNo  == SDKEV_CURUP )
  176.     {
  177.         if ( sdkDlg->posSel < 0 )
  178.         {
  179.             sdkDlg->posSel = sdkDlg->numDsp - 1;
  180.             sdkdsp_prog( sdkDlg, sdkDlg->posDspTop + sdkDlg->posSel );
  181.         } else
  182.         {    if ( sdkDlg->posSel == 0 && sdkDlg->posDspTop > 0 )
  183.             {
  184.                 --sdkDlg->posDspTop;
  185.                 sdkdsp_prog( sdkDlg, -1 );
  186.                 if ( sdkDlg->sb )
  187.                     SB_vUpdate( sdkDlg->sb );
  188.             } else if ( sdkDlg->posSel > 0 )
  189.             {
  190.                 sdkdsp_prog( sdkDlg, sdkDlg->posDspTop + (sdkDlg->posSel--) );
  191.                 sdkdsp_prog( sdkDlg, sdkDlg->posDspTop + sdkDlg->posSel );
  192.             }
  193.         }
  194.     } else if ( evNo == SDKEV_CURDOWN )
  195.     {
  196.         if ( sdkDlg->posSel < 0 )
  197.         {
  198.             sdkDlg->posSel = 0;
  199.             sdkdsp_prog( sdkDlg, sdkDlg->posDspTop );
  200.         } else
  201.         {    if ( sdkDlg->posSel == sdkDlg->numDsp - 1 && sdkDlg->posDspTop < sdkDlg->numProg - sdkDlg->numDsp )
  202.             {
  203.                 ++sdkDlg->posDspTop;
  204.                 sdkdsp_prog( sdkDlg, -1 );
  205.                 if ( sdkDlg->sb )
  206.                     SB_vUpdate( sdkDlg->sb );
  207.             } else if ( sdkDlg->posSel <  sdkDlg->numDsp - 1 )
  208.             {
  209.                 sdkdsp_prog( sdkDlg, sdkDlg->posDspTop + (sdkDlg->posSel++) );
  210.                 sdkdsp_prog( sdkDlg, sdkDlg->posDspTop + sdkDlg->posSel );
  211.             }
  212.         }
  213.     } else if ( evNo == SDKEV_EXEC )
  214.     {
  215.         if ( sdkDlg->posSel >= 0 )
  216.             return (sdkDlg->posDspTop + sdkDlg->posSel);
  217.     }
  218.     return (EV_BREAK);
  219. }
  220.  
  221. static int        sdkFunc_sbar( int evNo, SB_T *sb )
  222. {
  223.     SDKDLG_T    *sdkDlg = sb->ptr;
  224.  
  225.     if ( sdkDlg->posDspTop == sb->top )
  226.         return (EV_NOTHING);
  227.     sdkDlg->posDspTop = sb->top;
  228.     sdkdsp_prog( sdkDlg, -1 );
  229.     return (EV_NOTHING);
  230. }
  231.  
  232. void    sdkFunc_dlgdsp( BLKDLG_T *dlg )
  233. {
  234.     SDKDLG_T        *sdkDlg = dlg->ptr;
  235.     int                x1 = dlg->rect.x0 + 2;
  236.     int                y1 = dlg->rect.y0 + 2;
  237.     int                x2 = dlg->rect.x0 + dlg->rect.xs - 1 - 2;
  238.     int                y2 = dlg->rect.y0 + dlg->rect.ys - 1 - 2;
  239.     EV_T            *ev = sdkDlg->ev;
  240.     int                evPos = 0;
  241.     void            *win = NULL;
  242.     LAYER_T            *ly = SiScn->layerCrt;
  243.     CONST COLOR_T    sha = ly->col.dark, hil = ly->col.white;
  244.  
  245.     sdkDlg->fr.x1 = x1;
  246.     sdkDlg->fr.y1 = y1;
  247.     sdkDlg->fr.x2 = x2;
  248.     sdkDlg->fr.y2 = y2;
  249.  
  250.     /* âNâìü[âYâ{â^âô    ------------------------------------------------*/
  251.     {
  252.         CONST int    xx1 = x1   , yy1 = y1;
  253.         CONST int    xx2 = x1+15, yy2 = y1+15;
  254.  
  255.         SCN_PUTIMGPTN( &Ptn16x16_close, xx1, yy1, OPAQUE, ly->col.black,ly->col.gray);
  256.         SCN_BOXCON(xx1,yy1,xx2,yy2,1,PSET,hil, sha);
  257.         EV_SETBTN1(ev,evPos++, SDKEV_EXIT, sdkDlg, 0,
  258.             win, EVSW_LEFT,xx1,yy1,xx2,yy2,1,hil,sha);
  259.     }
  260.  
  261.     /* â^âCâgâï    --------------------------------------------------------*/
  262.     {
  263.         CONST int    xx1 = x1 + 16, yy1 = y1;
  264.         CONST int    xx2 = x2     , yy2 = y1 + 15;
  265.         static CONST char    *title = TITLE_DLG;
  266.  
  267.         SCN_BOXFCON(xx1,yy1,xx2,yy2,1,PSET,ly->col.gray,hil,sha);
  268.         EV_SETFR(ev,evPos++, 0, dlg,BlkDlgMoveEvFunc,win,EVSW_LEFT,
  269.           xx1, yy1, xx2, yy2);
  270.         SCN_PUTS(SiFts->ftsSs2,title,xx1+3,yy1+3,OPAQUE,ly->col.white,ly->col.gray);
  271.         SCN_PUTS(SiFts->ftsSs2,title,xx1+2,yy1+2,PSET  ,ly->col.black,ly->col.gray);
  272.     }
  273.  
  274.     {    /* âvâìâOâëâÇêΩùùò\Ī    ----------------------------------------*/
  275.         CONST int        xx1 = x1 + 2;
  276.         CONST int        yy1 = y1 + 16 + 2;
  277.         CONST int        xx2 = x1 + 2 + sdkDlg->xsDsp - 1;
  278.         CONST int        yy2 = yy1 + (2+YSMENU*sdkDlg->numDsp+2) -1;
  279.  
  280.         sdkDlg->frScn.x1 = xx1;
  281.         sdkDlg->frScn.y1 = yy1;
  282.         sdkDlg->frScn.x2 = xx2;
  283.         sdkDlg->frScn.y2 = yy2;
  284.  
  285.         SCN_BOXFCON(xx1,yy1,xx2,yy2,1,PSET,ly->col.white,ly->col.dark,ly->col.gray);
  286.     }
  287.  
  288.     if ( sdkDlg->sb )
  289.     {    /* âXâNâìü[âïâoü[    --------------------------------------------*/
  290.         SB_T    *sb = sdkDlg->sb;
  291.         FRAME_T    fr;
  292.  
  293.         fr.x1 = sdkDlg->frScn.x2 + 2;
  294.         fr.y1 = sdkDlg->frScn.y1;
  295.         fr.x2 = x2 - 2;
  296.         fr.y2 = sdkDlg->frScn.y2;
  297.         SB_vDsp( sb, &fr );
  298.     }
  299.  
  300.     /* âvâìâOâëâÇêΩùùé╠ò\Ī    --------------------------------------------*/
  301.     sdkdsp_prog( sdkDlg, -1 );
  302.  
  303.     /* âJü[â\âïâLü[ùpâCâxâôâg    ----------------------------------------*/
  304.     EV_SETKON1( ev,evPos++, SDKEV_CURUP  ,sdkDlg,sdkEvFunc_cursor, win,0xFFFF,KA_UP   );
  305.     EV_SETKON1( ev,evPos++, SDKEV_CURDOWN,sdkDlg,sdkEvFunc_cursor, win,0xFFFF,KA_DOWN );
  306.     EV_SETKON1( ev,evPos++, SDKEV_EXEC   ,sdkDlg,sdkEvFunc_cursor, win,